#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
30万字文本转语音性能测试脚本
测试优化前后的性能差异
"""

import time
import os
import sys

def generate_test_text(length=300000):
    """生成指定长度的测试文本"""
    base_text = """
    这是一个用于测试文本转语音性能的示例文本。我们需要生成足够长的文本来测试30万字的处理能力。
    文本转语音技术已经发展了很多年，从最初的机械合成到现在的神经网络合成，质量越来越高。
    在这个测试中，我们将评估不同优化策略对处理大量文本时的性能影响。
    
    主要的优化包括：
    1. 智能分段策略 - 根据文本长度动态调整分段大小
    2. 网络连接池优化 - 大幅提升并发连接数
    3. 超级线程池 - 支持64线程超级并发
    4. 内存缓存优化 - 3GB内存缓存和临时文件复用
    5. 流式音频合并 - 边转换边合并提高效率
    6. 性能基准测试 - 实时监控和评估性能
    
    这些优化策略的目标是将30万字的处理时间从15-30分钟缩短到5-10分钟，实现3-6倍的性能提升。
    """
    
    # 计算需要重复多少次
    base_length = len(base_text)
    repeat_count = (length + base_length - 1) // base_length
    
    full_text = base_text * repeat_count
    return full_text[:length]

def test_performance():
    """运行性能测试"""
    print("🚀 30万字文本转语音性能测试")
    print("=" * 50)
    
    # 生成测试文本
    print("📝 生成测试文本...")
    test_text = generate_test_text(300000)
    actual_length = len(test_text)
    print(f"✅ 测试文本生成完成: {actual_length:,} 字符")
    
    # 测试配置检测
    try:
        from config import auto_detect_performance_mode, is_mega_text, get_mega_text_config
        
        print(f"\n🔍 配置检测:")
        mode = auto_detect_performance_mode(actual_length)
        print(f"   性能模式: {mode}")
        print(f"   超大文本: {'是' if is_mega_text(actual_length) else '否'}")
        
        if is_mega_text(actual_length):
            mega_config = get_mega_text_config()
            print(f"   分段配置: {mega_config['segmentation']['max_length']} 字符/段")
            print(f"   网络连接: {mega_config['network']['total_connections']} 个")
            print(f"   线程数量: {mega_config['concurrency']['max_workers']} 个")
            print(f"   内存缓存: {mega_config['memory']['cache_size'] // (1024*1024*1024)} GB")
            
    except ImportError as e:
        print(f"❌ 配置模块导入失败: {e}")
        return False
    
    # 分段测试
    print(f"\n📊 分段策略测试:")
    try:
        from text_to_speech import ConversionWorker
        
        # 创建临时worker来测试分段
        worker = ConversionWorker(test_text, "test_output.wav", "zh-CN-XiaoxiaoNeural", 1.0)
        
        start_time = time.time()
        segments = worker.split_text(test_text)
        split_time = time.time() - start_time
        
        print(f"   分段数量: {len(segments)} 个")
        print(f"   分段用时: {split_time:.2f} 秒")
        print(f"   平均长度: {sum(len(s) for s in segments) // len(segments):,} 字符/段")
        print(f"   最短段落: {min(len(s) for s in segments):,} 字符")
        print(f"   最长段落: {max(len(s) for s in segments):,} 字符")
        
        # 预估处理时间
        estimated_time = len(segments) * 2  # 假设每段2秒
        print(f"   预估时间: {estimated_time // 60}分{estimated_time % 60}秒")
        
        # 性能评估
        if len(segments) <= 150:
            print(f"   分段评估: 🏆 优秀 (目标120段)")
        elif len(segments) <= 200:
            print(f"   分段评估: 🥇 良好")
        elif len(segments) <= 300:
            print(f"   分段评估: 🥈 一般")
        else:
            print(f"   分段评估: ⚠️ 需要优化")
            
    except Exception as e:
        print(f"❌ 分段测试失败: {e}")
        return False
    
    print(f"\n🎯 性能预期:")
    print(f"   目标时间: 5-10分钟")
    print(f"   目标速度: {actual_length // 600:,} 字符/秒 (10分钟)")
    print(f"   加速目标: 3-6倍")
    
    print(f"\n✅ 性能测试配置验证完成！")
    print(f"💡 提示: 运行实际转换测试以获得准确的性能数据")
    
    return True

if __name__ == "__main__":
    success = test_performance()
    if success:
        print(f"\n🎉 测试完成！系统已准备好处理30万字超大文本")
    else:
        print(f"\n❌ 测试失败，请检查配置")
        sys.exit(1)
